<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="cmd.css" rel="stylesheet" type="text/css">
<title>GRUB4DOS dd、write参数</title>
</head>

<body>
<h2>合盘菜单实例解读之dd、write命令在MAXDOS高级菜单中的应用（by PlantSoot@wuyou）</h2>
<p>菜单：</p>
<blockquote>
  <p><span class="bat"> title 运行MAXDOS工具箱中的GHOST工具<br>
    find --set-root /BOOT/IMGS/MAXDOS.IMG (fd0)<br>
    map --mem /BOOT/IMGS/MAXDOS.IMG (fd0)<br>
    map --hook<br>
    <span class="Options">dd if=(fd0)/CONFIG.SYS of=(fd0)/CONFIG.SYS bs=1 skip=123 count=1 seek=146</span><br>
    </span><strong>#dd if=(fd0)/CONFIG.SYS of=(fd0)/CONFIG.SYS bs=1 skip=74 count=1 seek=146</strong><span class="bat"><br>
    </span><span class="Options">write --offset=894 (fd0)/AUTOEXEC.BAT call GH.bat</span><span class="bat"><br>
    chainloader (fd0)+1<br>
    rootnoverify (fd0)</span></p>
</blockquote>
<p>“CONFIG.SYS”文件的内容：</p>
<blockquote>
  <p><span class="bat"> NUMLOCK=OFF<br>
    DEVICE=CONFECT.SYS<br>
    rem [SETTINGS]<br>
    set alhead=6<br>
    set align=10,1<br>
    set alnote=6<br>
    set shortcut=a,1<br>
    set color=2,0,17,21<br>
    set default=1,9,9<br>
    </span><span class="Notes">……省略部分内容……</span></p>
</blockquote>
<p>“AUTOEXEC.BAT”文件的内容：</p>
<blockquote>
  <p> <span class="Notes">……省略部分内容……</span><span class="bat"><br>
    CLS<br>
    IF &quot;%option%&quot;==&quot;CJDOS&quot; PATH=%SysDrive%\;%SysDrive%\SOFT;%SysDrive%\SOFT\TOOL;%SysDrive%\SOFT\TOOL\HPA &gt;NUL<br>
    Call M.BAT &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
    GOTO EXIT<br>
    </span><span class="Notes">……省略部分内容……</span><br>
(  <span class="cmd">注意</span>：Call M.BAT后面有预留的很多空格，以供dd和write修改的时候用)</p>
</blockquote>
<p>&nbsp;</p>
<h3>复习<a href="./GRUB4DOS5命令索引.htm#dd">dd</a>用法：</h3>
<blockquote>
  <p>dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]</p>
  <p> 将 <span class="Options">IF</span>（input file 源文件）复制到 <span class="Options">OF</span> （output file 目标文件）中。</p>
  <p><span class="Options">BS</span> 是以字节计数的一个块的大小，默认值是512 。</p>
  <p><span class="Options">C</span> 是复制的块数，默认值是源文件中的总块数。</p>
  <p><span class="Options">IN</span> 指定在读取时跳过的块数，默认值是 0 。</p>
  <p><span class="Options">OUT</span> 指定在写入时跳过的块数，默认值是0 。</p>
  <p><span class="Options">buf</span> 表示dd所用的读写缓存的起始地址。</p>
  <p><span class="Options">buflen</span> 表示缓存的长度，即大小。</p>
  <p>注： 已跳过的块不会被改变。源文件和目标文件必须是存在的。</p>
</blockquote>
<h3>复习<a href="./GRUB4DOS5命令索引.htm#write">write</a>用法：</h3>
  <blockquote>
    <p>write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING</p>
    <p> <span class="Options">SKIP</span> 是一个整数，默认值是 0 。</p>
    <p> 如果 <span class="Options">ADDR_OR_FILE</span> 选项被指定为一个整数，那么它被作为一个内存地址对待，<br>
      <span class="style1">并且 INTEGER_OR_STRING 选项也必须是一个整数值。整数 INTEGER_OR_STRING 将被写入（ADDR_OR_FILE 加上 SKIP 值）的地址处。<br>
      如果 ADDR_OR_FILE选项 指定的是一个设备或一个文件，那么INTEGER_OR_STRING 选项将被作为一个字符串对待，它将被写入跳过 SKIP 个字节（字节计数）的指定的设备或文件当中。</span></p>
  </blockquote>
<p>&nbsp;</p>
<p>结合本例：</p>
  <p>“<span class="bat">dd if=(fd0)/CONFIG.SYS of=(fd0)/CONFIG.SYS</span> <span class="Options">bs=1 skip=123 count=1 seek=146</span>”，</p>
<blockquote>
  <p><span class="Options">bs=1</span> 代表以一个字节为单位读写，</p>
  <p><span class="Options">skip=123</span> 即读时跳过123个字节，其中空格也是一个字节，换行符也是一个字节，即从第124个字符开始读，</p>
  <p><span class="Options">count=1</span> 代表只写一个由bs参数指定单位的块，这里就代表只写一个字节，</p>
  <p><span class="Options">seek=146</span> 用来指定写入时跳过146个字节，即从第147个字节的位置开始写。</p>
  <p> <span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本例中第124个字节是“set color=2,0,17,21”中的“0”这个字符，第147字节是“set default=1,9,9”中的第一个“9”这个字符，也就是说把“0”这个字符复制到“9”所在的位置，复制完后就变成“set default=1,0,9”（等待0秒进入默认菜单）。同样，也可以把“skip=123”改为“skip=74”，这样从75字节开始读一个字节，也就是读取“set align=10,1”中的“0”，然后写到第147字节的位置，本例中注释掉的菜单和上面的菜单效果一样；</span><br>
  </p>
</blockquote>
<p>“<span class="bat">write </span><span class="Options">--offset=894 </span><span class="bat">(fd0)/AUTOEXEC.BAT </span><span class="Options">call GH.bat</span>”</p>
<blockquote>
  <p>表示把“call GH.bat”这个字符串写到(fd0)/AUTOEXEC.BAT文件里面，</p>
  <p><span class="Options">--offset=894</span> 表示写入时跳过894字节，从第895字节开始写，也就是写到“Call M.BAT”这行（会覆盖原有的字符），</p>
  <p>也就是写完变成“call GH.bat                                       <span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="bat">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>”，</p>
  <p>注意，后面的空格如果没被覆盖完的话会依旧存在，但如果写入的字符串超过本行的长度会导致菜单出错。</p>
</blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p></p>
</body>
</html>
